import { getUserProfileAPI, getUserInfoAPI, loginAPI } from '@/api/userApi'
import { getToken, setToken, removeToken } from '@/utils/auth'
import {resetRouter} from "@/router";

const actions = {
  /* 发送登录请求的action */
  async loginAction({ commit }, loginForm) {
    // 调用登录API接口返回的是一个Promise对象 使用await拿到then第一个函数的第一个参数(成功的结果)
    const loginResult = await loginAPI(loginForm)
    // 提交一个"setToken"的mutation往Vuex中存储token和cookie中持久化存储
    commit('setToken', loginResult.data)
    return loginResult.message
  },
  /* 退出登录的action */
  async logoutAction({ commit }) {
    // 清空token
    commit('clearToken')
    // 清空userInfo用户信息
    commit('clearUserInfo')
    // 重置路由
    resetRouter()
    return '退出成功'
  },
  /* 发送请求获取用户信息的action */
  async getUserInfoAction({ commit }) {
    // 获取用户资料的接口
    const { data: userProfile } = await getUserProfileAPI()
    // 获取用户信息的接口(此接口的参数需要依赖前面一个请求所返回的结果里面的userId)
    const { data: userInfo } = await getUserInfoAPI(userProfile.userId)
    // 提交mutation(展开两个对象形成一个新对象)
    commit('setUserInfo', { ...userProfile, ...userInfo })
    return userProfile
  }
}
const mutations = {
  /* 设置token的mutation */
  setToken(state, token) {
    // 往Vuex中存储
    state.token = token
    // 往cookie中持久化存储token
    setToken(token)
  },
  /* 清空token的mutation */
  clearToken(state) {
    // 往Vuex中清空token
    state.token = ''
    // 清空cookie中持久化存储的token
    removeToken()
  },
  /* 设置用户信息的mutation */
  setUserInfo(state, userInfo) {
    state.userInfo = userInfo
  },
  /* 清空用户信息的mutation */
  clearUserInfo(state) {
    state.userInfo = {}
  }
}
const state = () => {
  return {
    /* 用户的token令牌 */
    token: getToken() || '',
    /* 用户的个人信息 */
    userInfo: {}
  }
}
export default {
  namespaced: true,
  state,
  mutations,
  actions
}

